#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>

void GetChild(int signo)
{
  printf("get a signal: %d, pid: %d \n", signo, getpid());
}

int main()
{
  // signal(17, GetChild);//17号信号就是SIGCHLD
  signal(17, SIG_IGN);//显示设置忽略17号信号，当进程退出后，自动释放僵尸进程
  pid_t id = fork();
  if(id == 0)
  {
    //child
    int cnt = 5;
    while(cnt--)
    {
      printf("我是子进程：pid: %d\n", getpid());
      sleep(1);
    }
    exit(0);
  }
  //father
  while(1)//一直等待子进程
  {
    printf("我是父进程，我在等待子进程, pid: %d\n", getpid());
    sleep(1);
  }
  return 0;
}
















//volatile int flag = 0;//保持内存的可见性
////告诉编译器，不要做优化，必须从内存上读取内存，不要读取中间缓存区寄存器中的变量
//
//void handler(int signo)
//{
//  flag = 1;//将flag置为1
//  printf("change flag 0 to 1\n");
//}
//
//int main()
//{
//  signal(2, handler);//捕捉2号信号
//
//  while(!flag);//当flag为0就一直循环
//  printf("程序正常退出\n");
//  return 0;
//}
